/**
 * 超级管理员服务接口
 *
 * 开发人员：徐少洋
 * 开发时间：2025-11-21
 * 模块职责：定义超级管理员的认证、授权和管理功能
 */
package com.pbl.service;

import com.pbl.entity.SuperAdmin;
import com.pbl.entity.SuperAdminLog;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

public interface SuperAdminService {
    
    /**
     * 超级管理员登录
     * @param username 用户名
     * @param password 密码
     * @return 包含token和用户信息的Map
     */
    Map<String, Object> login(String username, String password);
    
    /**
     * 创建超级管理员
     * @param superAdmin 超级管理员对象
     * @param password 明文密码
     * @return 创建的超级管理员
     */
    SuperAdmin create(SuperAdmin superAdmin, String password);
    
    /**
     * 更新超级管理员信息
     * @param id 超级管理员ID
     * @param superAdmin 更新的信息
     * @return 更新后的超级管理员
     */
    SuperAdmin update(Long id, SuperAdmin superAdmin);
    
    /**
     * 获取超级管理员详情
     * @param id 超级管理员ID
     * @return 超级管理员对象
     */
    SuperAdmin get(Long id);
    
    /**
     * 获取所有超级管理员列表
     * @return 超级管理员列表
     */
    List<SuperAdmin> list();
    
    /**
     * 记录超级管理员操作日志
     * @param superAdminId 超级管理员ID
     * @param action 操作类型
     * @param targetType 目标类型
     * @param targetId 目标ID
     * @param detail 详细信息
     * @param ipAddress IP地址
     * @param userAgent 用户代理
     */
    void logAction(Long superAdminId, String action, String targetType, Long targetId, 
                   String detail, String ipAddress, String userAgent);
    
    /**
     * 获取超级管理员操作日志
     * @param superAdminId 超级管理员ID
     * @param page 页码
     * @param size 每页大小
     * @return 分页日志
     */
    Page<SuperAdminLog> getLogs(Long superAdminId, int page, int size);
    
    /**
     * 获取针对特定目标的操作日志
     * @param targetType 目标类型
     * @param targetId 目标ID
     * @return 日志列表
     */
    List<SuperAdminLog> getTargetLogs(String targetType, Long targetId);
}

